As an increasing number of applications and services are being made available over networks such as the Internet, an increasing number of content, application, and/or service providers are turning to technologies such as cloud computing. Cloud computing, in general, is an approach to provide access to resources through services, such as Web services, where the hardware and/or software used to support those services is dynamically scalable to meet the needs of the services at any given time. A user or customer typically will rent, lease, or otherwise pay for access to resources through the cloud, and thus does not have to purchase and maintain the hardware and/or software to provide access to these resources.
When a customer requires the services of a cloud-computing environment, any number of virtual machines may be provisioned to implement the services required by the customer. Each of the virtual machines are configured to run a particular operating system and/or one or more applications. The operating system and/or application(s) may be stored as a source blob (e.g., a source image) in a repository that includes a plurality of differently configured source blobs (e.g., each source blob may comprise a set of different operating systems and/or application(s) and/or versions thereof). In such a scenario, the source blob is typically copied (in its entirety) to the same one or more node(s) (e.g., server(s)) on which the virtual machine(s) are to be executed), and the virtual machine(s) begin normal operation (e.g., performing read and write requests of data included in the copy of the source blob) after the source blob is copied. However, copying the entire source blob can be a slow process, especially when the source blob is large in size (e.g., 30 GB). This disadvantageously delays the time in which the virtual machine(s) can be utilized. Moreover, copying the entire source blob to each of the node(s) consumes a considerable amount of storage resources.